use super::type_schema::TypeSchema;
use lazy_static::lazy_static;

pub struct ProjectStep {
    pub name: &'static str,
    pub itype: TypeSchema,
    pub otype: TypeSchema,
}

pub struct Steps {
    pub calibration: ProjectStep,
    pub tracking: ProjectStep,
    pub stimulus: ProjectStep,
    pub analysis: ProjectStep,
    pub feature: ProjectStep,
    pub strategy: ProjectStep,
}

lazy_static! {
    pub static ref STEPS: Steps = Steps {
        calibration: ProjectStep {
            name: "Calibration",
            itype: TypeSchema::from_str("FilePath"),
            otype: TypeSchema::from_str("CalibTransform")
        },
        tracking: ProjectStep {
            name: "Tracking",
            itype: TypeSchema::from_str("FilePath"),
            otype: TypeSchema::from_str("List<List<(PointF, Float)>>")
        },
        stimulus: ProjectStep {
            name: "Stimulus",
            itype: TypeSchema::from_str("FilePath"),
            otype: TypeSchema::from_str("List<SingleStimulus>")
        },
        analysis: ProjectStep {
            name: "Analysis",
            itype: TypeSchema::from_str("(CalibOut, TrackingOut, StimulusOut)"),
            otype: TypeSchema::from_str("List<Tuple<Pose, FrameStimulusProb>>")
        },
        feature: ProjectStep {
            name: "Feature",
            itype: TypeSchema::from_str("List<Tuple<Pose, FrameStimulusProb>>"),
            otype: TypeSchema::from_str("DeepModel")
        },
        strategy: ProjectStep {
            name: "Strategy",
            itype: TypeSchema::from_str("DeepModel"),
            otype: TypeSchema::from_str("StrategyDeepModel")
        }
    };
}

